home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / CIncludes / Translation.h < prev    next >
C/C++ Source or Header  |  1996-05-01  |  12KB  |  314 lines

  1. /*
  2.      File:        Translation.h
  3.  
  4.      Contains:    Translation Manager (Macintosh Easy Open) Interfaces.
  5.  
  6.      Version:    Technology:    Macintosh Easy Open 1.1
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. */
  18. #ifndef __TRANSLATION__
  19. #define __TRANSLATION__
  20.  
  21. #ifndef __TYPES__
  22. #include <Types.h>
  23. #endif
  24. #ifndef __FILES__
  25. #include <Files.h>
  26. #endif
  27. #ifndef __COMPONENTS__
  28. #include <Components.h>
  29. #endif
  30. #ifndef __TRANSLATIONEXTENSIONS__
  31. #include <TranslationExtensions.h>
  32. #endif
  33.  
  34. #ifdef __cplusplus
  35. extern "C" {
  36. #endif
  37.  
  38. #if PRAGMA_IMPORT_SUPPORTED
  39. #pragma import on
  40. #endif
  41.  
  42. #if PRAGMA_ALIGN_SUPPORTED
  43. #pragma options align=mac68k
  44. #endif
  45.  
  46. /* enumerated types on how a document can be opened*/
  47. typedef short DocOpenMethod;
  48.  
  49. enum {
  50.     domCannot                    = 0,
  51.     domNative                    = 1,
  52.     domTranslateFirst            = 2,
  53.     domWildcard                    = 3
  54. };
  55.  
  56. /* 0L terminated array of OSTypes, or FileTypes*/
  57. typedef OSType TypesBlock[64];
  58. typedef OSType *TypesBlockPtr;
  59. /* Progress dialog resource ID*/
  60.  
  61. enum {
  62.     kTranslationScrapProgressDialogID = -16555
  63. };
  64.  
  65. /* block of data that describes how to translate*/
  66. struct FileTranslationSpec {
  67.     OSType                             componentSignature;
  68.     const void *                    translationSystemInfo;
  69.     FileTypeSpec                     src;
  70.     FileTypeSpec                     dst;
  71. };
  72. typedef struct FileTranslationSpec FileTranslationSpec;
  73.  
  74. typedef FileTranslationSpec *FileTranslationSpecArrayPtr;
  75. #if FOR_SYSTEM7_AND_SYSTEM8_COOPERATIVE
  76. /*
  77. ****************************************************************************************
  78. *   GetFileTypesThatAppCanNativelyOpen
  79. *  This routine returns a list of all FileTypes that an application can open by itself
  80. *  Enter:    appVRefNumHint        volume where application resides (can be wrong, and if is, will be used as a starting point)
  81. *             appSignature        signature (creator) of application
  82. *             nativeTypes            pointer to a buffer to be filled with up to 64 FileTypes
  83. *  Exit:    nativeTypes            zero terminated array of FileTypes that can be opened by app
  84. */
  85. extern pascal OSErr GetFileTypesThatAppCanNativelyOpen(short appVRefNumHint, OSType appSignature, FileType *nativeTypes)
  86.  TWOWORDINLINE(0x701C, 0xABFC);
  87.  
  88. /*
  89. ****************************************************************************************
  90. *  ExtendFileTypeList
  91. *  This routine makes a new list of file types that can be translated into a type in the given list
  92. *  Used by StandardFile
  93. *  Enter:    originalTypeList        pointer to list of file types that can be opened
  94. *             numberOriginalTypes        number of file types in orgTypeList
  95. *              extendedTypeList        pointer to a buffer to be filled with file types
  96. *             numberExtendedTypes        max number of file types that can be put in extendedTypeList
  97. *  Exit:    extendedTypeList        buffer filled in with file types that can be translated
  98. *             numberExtendedTypes        number of file types put in extendedTypeList
  99. */
  100. extern pascal OSErr ExtendFileTypeList(const FileType *originalTypeList, short numberOriginalTypes, FileType *extendedTypeList, short *numberExtendedTypes)
  101.  TWOWORDINLINE(0x7009, 0xABFC);
  102.  
  103. /*
  104. ****************************************************************************************
  105. *  This routine checks if a file can be opened by a particular application.
  106. *  If so, it returns if it needs to be translated first, and if so then how.
  107. *  The FileTypes that the app can open are specified by nativelyOpenableTypes,
  108. *  or if it is NULL, GetFileTypesThatAppCanNativelyOpen is called.
  109. *  Enter:    targetDocument        document to check if it can be opened
  110. *             appVRefNumHint        vRefNum of application to open doc ( can be wrong, and if is, will be used as a starting point)
  111. *             appSignature        signature (creator) of application to open doc
  112. *             nativeTypes            zero terminated list of FileTypes app can open natively, or NULL to use default list
  113. *             onlyNative            whether to consider if document can be translated before opening
  114. *             howToOpen            pointer to buffer in which to put how the document can be opened
  115. *             howToTranslate        pointer to buffer in which to put a FileTranslationSpec record
  116. *  Exit:    howToOpen            whether file needs to be translated to be read
  117. *             howToTranslate        if file can be translated, buffer filled in with how to translate
  118. *             returns                noErr, noPrefAppErr
  119. */
  120. extern pascal OSErr CanDocBeOpened(const FSSpec *targetDocument, short appVRefNumHint, OSType appSignature, const FileType *nativeTypes, Boolean onlyNative, DocOpenMethod *howToOpen, FileTranslationSpec *howToTranslate)
  121.  TWOWORDINLINE(0x701E, 0xABFC);
  122.  
  123. /*
  124. ****************************************************************************************
  125. *  GetFileTranslationPaths
  126. *  This routine returns a list of all ways a translation can occure to or from a FileType.
  127. *  The app is checked to exist.  The hint for each app is the VRefNum and DTRefNum
  128. *  Enter:    srcDoc            source file or NULL for all matches
  129. *             dstDoc            destination FileType or NULL for all matches
  130. *             maxResultCount
  131. *             resultBuffer
  132. *  Exit:    number of paths
  133. */
  134. extern pascal short GetFileTranslationPaths(FSSpec *srcDocument, FileType dstDocType, unsigned short maxResultCount, FileTranslationSpecArrayPtr resultBuffer)
  135.  TWOWORDINLINE(0x7038, 0xABFC);
  136.  
  137. /*
  138. ****************************************************************************************
  139. *  GetPathFromTranslationDialog
  140. *  This routine, with a given document, application, and a passed typelist will display the
  141. *  Macintosh Easy Open translation dialog allowing the user to make a choice.  The choice
  142. *  made will be written as a preference (so the next call to CanDocBeOpened() will work).
  143. *  The routine returns the translation path information.
  144. *  Enter:    theDocument            FSSpec to document to open
  145. *             theApplication        FSSpec to application to open document
  146. *             typeList            Nil terminated list of FileType's (e.g. SFTypeList-like) of types
  147. *                                 you would like the documented translated to.  Order most perferred
  148. *                                 to least.
  149. *  Exit:    howToOpen            Translation method needed to open document
  150. *             howToTranslate        Translation specification
  151. *             returns                Any errors that might occur.
  152. */
  153. extern pascal OSErr GetPathFromTranslationDialog(const FSSpec *theDocument, const FSSpec *theApplication, TypesBlockPtr typeList, DocOpenMethod *howToOpen, FileTranslationSpec *howToTranslate)
  154.  TWOWORDINLINE(0x7037, 0xABFC);
  155.  
  156. /*
  157. ****************************************************************************************
  158. *   TranslateFile
  159. *  This routine reads a file of one format and writes it to another file in another format. 
  160. *  The information on how to translated is generated by the routine CanDocBeOpened.
  161. *  TranslateFile calls through to the TranslateFile Extension's DoTranslateFile routine.  
  162. *  The destination file must not exist.  It is created by this routine.  
  163. *  Enter:    sourceDocument            input file to translate
  164. *             destinationDocument        output file of translation
  165. *             howToTranslate            pointer to info on how to translate
  166. *  Exit:    returns                    noErr, badTranslationSpecErr 
  167. */
  168. extern pascal OSErr TranslateFile(const FSSpec *sourceDocument, const FSSpec *destinationDocument, const FileTranslationSpec *howToTranslate)
  169.  TWOWORDINLINE(0x700C, 0xABFC);
  170.  
  171. /*
  172. ****************************************************************************************
  173. *   GetDocumentKindString
  174. *  This routine returns the string the Finder should show for the "kind" of a document
  175. *  in the GetInfo window and in the kind column of a list view.  
  176. *  Enter:    docVRefNum        The volume containing the document
  177. *             docType            The catInfo.fdType of the document
  178. *             docCreator        The catInfo.fdCreator of the document
  179. *             kindString        pointer to where to return the string
  180. *  Exit:    kindString        pascal string.  Ex: "\pSurfCalc spreadsheet"
  181. *             returns            noErr, or afpItemNoFound if kind could not be determined
  182. */
  183. extern pascal OSErr GetDocumentKindString(short docVRefNum, OSType docType, OSType docCreator, Str63 kindString)
  184.  TWOWORDINLINE(0x7016, 0xABFC);
  185.  
  186. /*
  187. ****************************************************************************************
  188. *  GetTranslationExtensionName
  189. *  This routine returns the translation system name from a specified TranslationSpec
  190. *  Enter:    translationMethod    The translation path to get the translation name from
  191. *  Exit:    extensionName        The name of the translation system
  192. *             returns                Any errors that might occur
  193. */
  194. extern pascal OSErr GetTranslationExtensionName(const FileTranslationSpec *translationMethod, Str31 extensionName)
  195.  TWOWORDINLINE(0x7036, 0xABFC);
  196.  
  197. /*
  198. ****************************************************************************************
  199. *  GetScrapDataProcPtr
  200. *  This is a prototype for the function you must supply to TranslateScrap. It is called to 
  201. *  get the data to be translated.  The first call TranslateScrap will make to this is to
  202. *  ask for the 'fmts' data.  That is a special.   You should resize and fill in the handle
  203. *  with a list all the formats that you have available to be translated, and the length of each.
  204. *  (See I.M. VI 4-23 for details of 'fmts').  It will then be called again asking for one of  
  205. *  the formats that 'fmts' list said was available.
  206. *  Enter:    requestedFormat            Format of data that TranslateScrap needs.
  207. *             dataH                    Handle in which to put the requested data
  208. *             srcDataGetterRefCon        Extra parameter for you passed to TranslateScrap
  209. *             
  210. *  Exit:    dataH                    Handle is resized and filled with data in requested format
  211. */
  212. typedef pascal OSErr (*GetScrapDataProcPtr)(ScrapType requestedFormat, Handle dataH, void *srcDataGetterRefCon);
  213.  
  214. #if GENERATINGCFM
  215. typedef UniversalProcPtr GetScrapDataUPP;
  216. #else
  217. typedef GetScrapDataProcPtr GetScrapDataUPP;
  218. #endif
  219.  
  220. enum {
  221.     uppGetScrapDataProcInfo = kPascalStackBased
  222.          | RESULT_SIZE(SIZE_CODE(sizeof(OSErr)))
  223.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(ScrapType)))
  224.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(Handle)))
  225.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(void *)))
  226. };
  227.  
  228. #if GENERATINGCFM
  229. #define NewGetScrapDataProc(userRoutine)        \
  230.         (GetScrapDataUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppGetScrapDataProcInfo, GetCurrentArchitecture())
  231. #else
  232. #define NewGetScrapDataProc(userRoutine)        \
  233.         ((GetScrapDataUPP) (userRoutine))
  234. #endif
  235.  
  236. #if GENERATINGCFM
  237. #define CallGetScrapDataProc(userRoutine, requestedFormat, dataH, srcDataGetterRefCon)        \
  238.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppGetScrapDataProcInfo, (requestedFormat), (dataH), (srcDataGetterRefCon))
  239. #else
  240. #define CallGetScrapDataProc(userRoutine, requestedFormat, dataH, srcDataGetterRefCon)        \
  241.         (*(userRoutine))((requestedFormat), (dataH), (srcDataGetterRefCon))
  242. #endif
  243. typedef GetScrapDataUPP GetScrapData;
  244. /*
  245. ****************************************************************************************
  246. *  TranslateScrap
  247. *  This routine resizes the destination handle and fills it with data of the requested format.
  248. *  The data is generated by translated one or more source formats of data supplied by
  249. *  the procedure srcDataGetter.  
  250. *  This routine is automatically called by GetScrap and ReadEdition.  You only need to call
  251. *  this if you need to translated scrap style data, but are not using the ScrapMgr or EditionMgr.
  252. *  Enter:    sourceDataGetter            Pointer to routine that can get src data
  253. *             sourceDataGetterRefCon        Extra parameter for dataGetter
  254. *             destinationFormat            Format of data desired
  255. *             destinationData                Handle in which to store translated data
  256. *             
  257. *  Exit:    dstData                        Handle is resized and filled with data in requested format
  258. */
  259. extern pascal OSErr TranslateScrap(GetScrapData sourceDataGetter, void *sourceDataGetterRefCon, ScrapType destinationFormat, Handle destinationData, short progressDialogID)
  260.  TWOWORDINLINE(0x700E, 0xABFC);
  261.  
  262. #endif
  263.  
  264. #if PRAGMA_ALIGN_SUPPORTED
  265. #pragma options align=reset
  266. #endif
  267.  
  268. #if PRAGMA_IMPORT_SUPPORTED
  269. #pragma import off
  270. #endif
  271.  
  272. #ifdef __cplusplus
  273. }
  274. #endif
  275.  
  276. #endif /* __TRANSLATION__ */
  277.  
  278.